/*#pragma once
#include <cmath>
#include <iostream>
#include <stdio.h>
#include <io.h>
#include <stdlib.h>

#include "Common.h"

// Must define the DLL before we include the header.
// For ease of use I put the dll/libs in the project folder.
#define GLFW_DLL
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "GLFW.lib")
#pragma comment(lib, "GLFWDLL.lib")
#pragma comment(lib, "assimp.lib")
#pragma comment(lib, "ILU.lib")
#pragma comment(lib, "ILUT.lib")
#pragma comment(lib, "DevIL.lib")
#include <GL/glfw.h>

#include "glext.h"

// Extensions
#include "myGlExtensions.h"

// assimp include files. These three are usually needed.
#include "../include/assimp/assimp.hpp"	//OO version Header!
#include "../include/assimp/aiPostProcess.h"
#include "../include/assimp/aiScene.h"
#include "../include/assimp/DefaultLogger.h"
#include "../include/assimp/LogStream.h"

// GLM
#include "../include/glm/glm.hpp"
#include "../include/glm/gtc/matrix_transform.hpp"
#include "../include/glm/gtc/quaternion.hpp"
#include "../include/glm/gtx/rotate_vector.hpp"

// Havok
#include "Havok_common.h"

// Declare some errors/exits for clarity.
static const int MYEXIT_SUCCESS = 0;
static const int MYEXIT_FAILED_OPENWINDOW = 1;
static const int MYEXIT_FAILED_LINKSHADERS = 2;
static const int MYEXIT_MODEL_NOT_TRIANGLES = 3;
static const int MYEXIT_FAILED_CONVERTIMAGE = 4;
static const int MYEXIT_DEVIL_NOT_INITIALIZED = 5;

/***********************************************************************+
/* Output an error.                                                        
/***********************************************************************+
inline void printError(char const * hdr,char const * err){
	std::cout << hdr << ": " << err << std::endl;
}

//Define this somewhere in your header file
#define BUFFER_OFFSET(i) ((char *)NULL + (i))


/***********************************************************************+
/* Directions.                                                       
/***********************************************************************+
#include <limits>
#define FLOAT_MIN numeric_limits<float>::min()
#define FLOAT_MAX numeric_limits<float>::max()

#define INT_MIN numeric_limits<int>::min()
#define INT_MAX numeric_limits<int>::max()

/***********************************************************************+
/* Directions.                                                       
/***********************************************************************+
const static glm::vec3 UP(0.0f,1.0f,0.0f);
const static glm::vec3 RIGHT(1.0f,0.0f,0.0f);
const static glm::vec3 FORWARD(0.0f,0.0f,1.0f);


/***********************************************************************+
/* Transformations.                                                     
/***********************************************************************+
typedef struct{
	glm::vec4 _position;
	glm::vec3 _translation;
	glm::vec3 _rotation;
	glm::vec3 _scale;
	glm::mat4 _model;
}TransformationCore;

const static float GLM_ROTATE_AMOUNT = 1.0f;//0.4f;


/***********************************************************************+
/* Macros.                                                     
/***********************************************************************+
// Get the larger of 2 supplied values.
#define THEMAX(a,b)( (a>b)?a:b )

// Get the lesser of 2 supplied values.
#define THEMIN(a,b)( (a<b)?a:b )

// Bound a value between a minimum_a and maximum_b.
#define THECLAMP(val,a,b)( THEMIN( (THEMAX(val,a)), b )  )